/*****************************/
/*** Matriz usando o new[] ***/
/*****************************/

#include <iostream>
#include <new>
using namespace std;

// Cria as linhas e colunas da matriz:
void matriz_inicializar(float ***mat, int lin, int col)
{
    int i;
    (*mat) = new (nothrow) float*[lin]; // Alocando o vetor que vai guardar cada linha.
    for (i=0 ; i<lin ; i++) // Alocando cada linha.
        (*mat)[i] = new (nothrow) float[col];
}

// Retorna o valor de um elemento de uma dada posição (não checa os limites da matriz!!!):
float matriz_get_elemento(float **mat, int l, int c)
{
    return(mat[l][c]);
}

// Seta o valor de um elemento de uma dada posição (não checa os limites da matriz!!!):
void matriz_set_elemento(float **mat, int l, int c, float x)
{
    mat[l][c] = x;
}

// Imprimir todos os elementos da matriz:
void matriz_imprimir(float **mat, int lin, int col)
{
    int i,j;
    for(i=0 ; i<lin ; i++)
    {
        for(j=0 ; j<col ; j++)
        {
            //cout <<"m["<<i<<","<<j<<"] = "<<matriz_get_elemento(mat,i,j)<<"\t";
            cout <<matriz_get_elemento(mat,i,j)<<"\t";
        }
        cout<<endl;
    }
}

int main(void)
{
    // Defina o tamnho da matriz aqui:
    int linhas  = 8;
    int colunas = 5;

    float **matriz;
    matriz_inicializar(&matriz,linhas,colunas);
    cout<<"Matriz: "<<linhas<<" linhas"<<" x "<<colunas<<" colunas.\n"<<endl;


///////////////////////////////////////////////////////////////////////////////////////////////////
    int i,j;
    for(i=0 ; i<linhas ; i++)
        for(j=0 ; j<colunas ; j++)
            matriz_set_elemento(matriz,i,j,   (i+j+1)   );
///////////////////////////////////////////////////////////////////////////////////////////////////

    matriz_imprimir(matriz,linhas,colunas);

    return(0);
}
